home *** CD-ROM | disk | FTP | other *** search
/ PsL Monthly 1993 December / PSL Monthly Shareware CD-ROM (December 1993).iso / prgmming / win / pascal / cdfile.exe / CDPLAY.PAS < prev    next >
Encoding:
Pascal/Delphi Source File  |  1992-12-31  |  4.0 KB  |  143 lines

  1. {$X+}
  2. program CDPlay;
  3.  
  4. uses Drivers, CD_Vars, CD_Unit, CRT;
  5.  
  6. Type
  7.   TotPlayRec = Record
  8.      Frames,
  9.      Seconds,
  10.      Minutes,
  11.      Nada     : Byte;
  12.   End;
  13.  
  14. Var
  15.   GoodDisk : Boolean;
  16.   SaveExit   : Pointer;
  17.   OldMode    : Word;
  18.   CurrentTrack,
  19.   StartTrack,
  20.   EndTrack   : Integer;
  21.   TotPlay    : TotPlayRec;
  22.   TrackInfo  : Array[1..99] of PAudioTrackInfo;
  23.  
  24. function LeadingZero(w: Word): String;
  25. var s: String;
  26. begin
  27.   Str(w:0, s);
  28.   LeadingZero := Copy('00', 1, 2 - Length(s)) + s;
  29. end;
  30.  
  31.  
  32. procedure DrawScreen;
  33. Const TStr = '%03d:%02d';
  34.       VStr = '%1d.%2d';
  35. Var   FStr : String;
  36.       Param: Array[1..2] of LongInt;
  37. begin
  38.   WriteLn('CD ROM Audio Disk Player');
  39.   WriteLn('Copyright 1992 by M. W. ARMSTRONG');
  40.   Param[1] := MSCDEX_Version.Major;
  41.   Param[2] := MSCDEX_Version.Minor;
  42.   FormatStr(FStr, VStr, Param);
  43.   WriteLn('MSCDEX Version '+FStr);
  44.   Str(NumberOfCD, FStr);
  45.   WriteLn('Number of CD ROM Drives is: '+Fstr);
  46.   WriteLn('First CD Drive Letter is  : '+Chr(FirstCD+65));
  47.   WriteLn('There are ' + LeadingZero(EndTrack - StartTrack + 1) + ' Tracks on this disk');
  48.   WriteLn('Total Play time is:  '+LeadingZero(TotPlay.Minutes)+':'+LeadingZero(TotPlay.Seconds));
  49. end;
  50. {***********************************************************************}
  51.  
  52. {***********************************************************************}
  53.  
  54.  
  55. procedure Setup;
  56. Var
  57.   LeadOut,
  58.   StartP,
  59.   TotalPlayTime    : LongInt;
  60.   I     : Integer;
  61.   A,B,C : LongInt;
  62.   Track : Byte;
  63.   EA    : Array[1..4] of Byte;
  64.   SP,EP : LongInt;
  65.  
  66. Begin
  67.   FillChar(AudioDiskInfo, SizeOf(AudioDiskInfo), #0);
  68.   DeviceStatus;
  69.   Audio_Disk_Info;
  70.   Pause_Audio;
  71.   If Paused THEN
  72.      Begin
  73.        Q_Channel_Info;
  74.        CurrentTrack := QChannelInfo.Track;
  75.      End;
  76.  
  77.     TotalPlayTime := 0;
  78.     LeadOut := AudioDiskInfo.LeadOutTrack;
  79.  
  80.     StartTrack := AudioDiskInfo.LowestTrack;
  81.     EndTrack := AudioDiskInfo.HighestTrack;
  82.     CurrentTrack := StartTrack;
  83.     I := StartTrack-1;
  84.  
  85.     Repeat               { Checks if Audio Track or Data Track }
  86.         Inc(I);
  87.         Track := I;
  88.         Audio_Track_Info(StartP, Track);
  89.     Until (Track AND 64 = 0) OR (I = EndTrack);
  90.  
  91.     StartTrack := I;
  92.  
  93.     For I := StartTrack to EndTrack DO
  94.       Begin
  95.         Track := I;
  96.         Audio_Track_Info(StartP, Track);
  97.         New(TrackInfo[I]);
  98.         FillChar(TrackInfo[I]^, SizeOf(TrackInfo[I]^), #0);
  99.         TrackInfo[I]^.Track := I;
  100.         TrackInfo[I]^.StartPoint := StartP;
  101.         TrackInfo[I]^.TrackControl := Track;
  102.       End;
  103.  
  104.     For I := StartTrack to EndTrack - 1 DO
  105.         TrackInfo[I]^.EndPoint := TrackInfo[I+1]^.StartPoint;
  106.     TrackInfo[EndTrack]^.EndPoint := LeadOut;
  107.  
  108.     For I := StartTrack to EndTrack DO
  109.         Move(TrackInfo[I]^.EndPoint, TrackInfo[I]^.Frames, 4);
  110.  
  111.     TrackInfo[StartTrack]^.PlayMin := TrackInfo[StartTrack]^.Minutes;
  112.     TrackInfo[StartTrack]^.PlaySec := TrackInfo[StartTrack]^.Seconds - 2;
  113.  
  114.     For I := StartTrack + 1 to EndTrack DO
  115.       Begin
  116.         EP := (TrackInfo[I]^.Minutes * 60) + TrackInfo[I]^.Seconds;
  117.         SP := (TrackInfo[I-1]^.Minutes * 60) + TrackInfo[I-1]^.Seconds;
  118.         EP := EP - SP;
  119.         TrackInfo[I]^.PlayMin := EP DIV 60;
  120.         TrackInfo[I]^.PlaySec := EP Mod 60;
  121.       End;
  122.  
  123.     TotalPlayTime := AudioDiskInfo.LeadOutTrack - TrackInfo[StartTrack]^.StartPoint;
  124.     Move(TotalPlayTime, TotPlay, 4);
  125. end;
  126.  
  127. {***********************************************************************}
  128.  
  129.  
  130. Begin
  131.   Setup;
  132.   Play_Audio(TrackInfo[StartTrack]^.StartPoint,
  133.              TrackInfo[EndTrack]^.EndPoint);
  134.   If Playing THEN
  135.      Begin
  136.        Audio_Status_Info;
  137.        DrawScreen;
  138.      End
  139.   ELSE
  140.       WriteLn('This is not an Audio CD');
  141. end.
  142.